#Import important libraries
import pandas as pd
import plotly.graph_objects as go
from plotly.subplots import make_subplots
import plotly.express as px
%pip install yfinance
import yfinance as yf
Requirement already satisfied: yfinance in c:\users\basuc\anaconda3\lib\site-packages (0.2.12) Requirement already satisfied: multitasking>=0.0.7 in c:\users\basuc\anaconda3\lib\site-packages (from yfinance) (0.0.11) Requirement already satisfied: pytz>=2022.5 in c:\users\basuc\anaconda3\lib\site-packages (from yfinance) (2022.7.1) Requirement already satisfied: pandas>=1.3.0 in c:\users\basuc\anaconda3\lib\site-packages (from yfinance) (1.4.4) Requirement already satisfied: html5lib>=1.1 in c:\users\basuc\anaconda3\lib\site-packages (from yfinance) (1.1) Requirement already satisfied: cryptography>=3.3.2 in c:\users\basuc\anaconda3\lib\site-packages (from yfinance) (37.0.1) Requirement already satisfied: beautifulsoup4>=4.11.1 in c:\users\basuc\anaconda3\lib\site-packages (from yfinance) (4.11.1) Requirement already satisfied: numpy>=1.16.5 in c:\users\basuc\anaconda3\lib\site-packages (from yfinance) (1.21.5) Requirement already satisfied: lxml>=4.9.1 in c:\users\basuc\anaconda3\lib\site-packages (from yfinance) (4.9.1) Requirement already satisfied: frozendict>=2.3.4 in c:\users\basuc\anaconda3\lib\site-packages (from yfinance) (2.3.5) Requirement already satisfied: requests>=2.26 in c:\users\basuc\anaconda3\lib\site-packages (from yfinance) (2.28.1) Requirement already satisfied: appdirs>=1.4.4 in c:\users\basuc\anaconda3\lib\site-packages (from yfinance) (1.4.4) Requirement already satisfied: soupsieve>1.2 in c:\users\basuc\anaconda3\lib\site-packages (from beautifulsoup4>=4.11.1->yfinance) (2.3.1) Requirement already satisfied: cffi>=1.12 in c:\users\basuc\anaconda3\lib\site-packages (from cryptography>=3.3.2->yfinance) (1.15.1) Requirement already satisfied: webencodings in c:\users\basuc\anaconda3\lib\site-packages (from html5lib>=1.1->yfinance) (0.5.1) Requirement already satisfied: six>=1.9 in c:\users\basuc\anaconda3\lib\site-packages (from html5lib>=1.1->yfinance) (1.16.0) Requirement already satisfied: python-dateutil>=2.8.1 in c:\users\basuc\anaconda3\lib\site-packages (from pandas>=1.3.0->yfinance) (2.8.2) Requirement already satisfied: idna<4,>=2.5 in c:\users\basuc\anaconda3\lib\site-packages (from requests>=2.26->yfinance) (3.3) Requirement already satisfied: urllib3<1.27,>=1.21.1 in c:\users\basuc\anaconda3\lib\site-packages (from requests>=2.26->yfinance) (1.26.11) Requirement already satisfied: charset-normalizer<3,>=2 in c:\users\basuc\anaconda3\lib\site-packages (from requests>=2.26->yfinance) (2.0.4) Requirement already satisfied: certifi>=2017.4.17 in c:\users\basuc\anaconda3\lib\site-packages (from requests>=2.26->yfinance) (2022.9.14) Requirement already satisfied: pycparser in c:\users\basuc\anaconda3\lib\site-packages (from cffi>=1.12->cryptography>=3.3.2->yfinance) (2.21) Note: you may need to restart the kernel to use updated packages.
WARNING: Ignoring invalid distribution -illow (c:\users\basuc\anaconda3\lib\site-packages) WARNING: Ignoring invalid distribution -illow (c:\users\basuc\anaconda3\lib\site-packages) WARNING: Ignoring invalid distribution -illow (c:\users\basuc\anaconda3\lib\site-packages) WARNING: Ignoring invalid distribution -illow (c:\users\basuc\anaconda3\lib\site-packages) WARNING: Ignoring invalid distribution -illow (c:\users\basuc\anaconda3\lib\site-packages) WARNING: Ignoring invalid distribution -illow (c:\users\basuc\anaconda3\lib\site-packages)
#Get Apple's stock data from Yahoo finance
stock = yf.Ticker("AAPL")
data = stock.history(period="1y")
#print the dataset
print(data.head())
Open High Low Close \
Date
2022-03-01 00:00:00-05:00 163.708314 165.596883 160.994756 162.217346
2022-03-02 00:00:00-05:00 163.400166 166.352284 161.968834 165.557098
2022-03-03 00:00:00-05:00 167.455598 167.892951 164.553182 165.229080
2022-03-04 00:00:00-05:00 163.499575 164.553190 161.123966 162.187515
2022-03-07 00:00:00-05:00 162.376387 164.026396 158.082391 158.340836
Volume Dividends Stock Splits
Date
2022-03-01 00:00:00-05:00 83474400 0.0 0.0
2022-03-02 00:00:00-05:00 79724800 0.0 0.0
2022-03-03 00:00:00-05:00 76678400 0.0 0.0
2022-03-04 00:00:00-05:00 83737200 0.0 0.0
2022-03-07 00:00:00-05:00 96418800 0.0 0.0
#Let's implement the momentum strategy in Algorithmic Trading using Python
#Calculation of Momentum
data['momentum'] = data['Close'].pct_change()
#Creating subplots to show momentum and buying/selling markers
figure = make_subplots(rows=2, cols=1)
figure.add_trace(go.Scatter(x=data.index,
y=data['Close'],
name='Close Price'))
figure.add_trace(go.Scatter(x=data.index,
y=data['momentum'],
name='Momentum',
yaxis='y2'))
#Adding the buy and sell signals
figure.add_trace(go.Scatter(x=data.loc[data['momentum'] > 0].index,
y=data.loc[data['momentum'] > 0]['Close'],
mode='markers', name='Buy',
marker=dict(color='green', symbol='triangle-up')))
figure.add_trace(go.Scatter(x=data.loc[data['momentum'] < 0].index,
y=data.loc[data['momentum'] < 0]['Close'],
mode='markers', name='Sell',
marker=dict(color='red', symbol='triangle-down')))
figure.update_layout(title="Algorithnic Trading using Momentum Strategy",
xaxis_title='Date',
yaxis_title='Price')
figure.update_yaxes(title="Momentum", secondary_y=True)
figure.show()
#So this is how we can implement an Algorithmic Trading strategy using the momentum strategy.
#In the above graph, the buy and sell signals are indicated by green triangle-up and
#red triangle-down markers respectively.
#Summary
#Algorithmic Trading means using algorithms in buying and selling decisions in the financial market.
#In an algorithmic trading strategy, a set of predefined rules are used to determine when to
#buy a financial instrument and when to sell it.